import { takeEvery, put, call } from "redux-saga/effects";
import delay from "../utils/delay";

const getListApi = () => {
  return fetch("http://121.89.205.189:3000/api/pro/list")
    .then((response) => response.json())
    .then((res) => {
      return res;
    });
};

function* fn() {
  yield console.log("fn");
}

function* fn2() {
  // yield后面只能放Promise对象
  yield delay(1000);
  // 在这里调用put相当于是在组件调用dispatch
  yield put({ type: "add" });
}

function* fn3() {
  // 请求数据
  // call是用来请求接口的
  const res = yield call(getListApi);
  yield put({ type: "getList", list: res.data });
}

// 用了saga的情况下，需要有一个sagas.js
// 最终暴露的是一个函数, 而且这个函数是一个Generator函数
function* mySaga() {
  // takeEvery是用来进行分配的，需要两个参数，分别是type的值，和一个回调函数
  yield takeEvery("abc", fn);
  yield takeEvery("asyncAdd", fn2);
  yield takeEvery("asyncGetList", fn3);
}

export default mySaga;
